#pragma once 
#include <iostream>
#include <string>

std::string opers = "+-*/%";

enum{
    DivZero = 1,
    ModZero,
    Unknown
};

class Task{
public:
    Task(int data1, int data2, char op)
    :_data1(data1),_data2(data2),_oper(op),_result(0),_exitcode(0)
    {}

    void run(){
        switch(_oper){
            case '+':
                _result = _data1 + _data2;
                break;
            case '-':
                _result = _data1 - _data2;
                break;
            case '*':
                _result = _data1 * _data2;
                break;
            case '/':
                {
                    if (_data2 == 0)
                        _exitcode = DivZero;
                    else
                        _result = _data1 / _data2;
                }
                break;
            case '%':
                {
                    if (_data2 == 0)
                        _exitcode = ModZero;
                    else
                        _result = _data1 % _data2;
                }
                break;
            default:
                _exitcode = Unknown;
                break;
            }
    }

    std::string GetResult(){
        std::string ret;
        ret += std::to_string(_data1);
        ret += _oper;
        ret += std::to_string(_data2);
        ret += '=';
        ret += std::to_string(_result);
        ret += "[code: ";
        ret += std::to_string(_exitcode);
        ret += ']';
        return ret;
    }

    std::string GetTask(){
        std::string ret;
        ret += std::to_string(_data1);
        ret += _oper;
        ret += std::to_string(_data2);
        ret += "=?";
        return ret;
    }

    ~Task()
    {}

private:
    int _data1;
    int _data2;
    char _oper;

    int _result;
    int _exitcode;
};